iT邦幫忙

2023 iThome 鐵人賽

DAY 12
1

我最近開始學習 PowerBI(PBI),發現PBI看似簡單但意外地相當複雜。
我想這是一個很好的機會,讓我分享和記錄我的學習進度。

對於那些希望更好理解PBI的人,請參考我的先前文章: 簡單介紹PowerBI - Part 1 以及 簡單介紹PowerBI - Part 2

什麼是DAX?
DAX(Data Analysis Expressions)是由微軟發明的一種編程語言。您可以使用它在Power BI、Analysis Services和Excel數據模型中構建公式和表達式。

DAX的最基本結構是什麼?

我們來拆解一個簡單DAX公式的結構。

https://ithelp.ithome.com.tw/upload/images/20230927/20162091VX9cmujiHJ.jpg

  • 等號運算符(=)--> 所有DAX公式都將以=開頭
  • [SalesAmount]是包含我們想要減去的值的列。您始終要在所選列周圍包括括號[]。與Excel公式不同,Excel公式引用單元格,而DAX公式始終引用列。
  • 減號(-)是減法的數學運算符。
  • 所選列[TotalCost]包含我們想要從[SalesAmount]列中的值中減去的值。

下面我來拆解一下基本常用的DAX functions:

(1) SUMX vs SUM
SUM是計算所選列總和的公式。如果您只想要單個列的匯總總數,這很有用。

*例如:Total Sales = SUM([SalesAmount])

SUMX,與SUM類似,但您可以一次聚合多個列。您需要指示列位於哪個表中。

*例如:Gross_Margin=SUMX(FactSales,FactSales[SalesAmount] -FactSales[TotalCost])

SUMX實際上是一個迭代函數,它將創建一個臨時表,用於存儲所選列的每一行的總和

注意:上述內容適用於其他聚合函數,如以下所示:

  • SUMX
  • MAXX
  • MINX
  • COUNTX
  • AVERAGEX
  • COUNTX

(2) Respective Function VS Non Respective Function
表導出將從數據模型中的數據創建臨時表。有兩種類型:

  • 可尊重的
    此函數將尊重報告中選擇的過濾器上下文
    例如:FactSales(Tbl),VALUES(FactSales[SalesAmount])

  • 不可尊重的
    忽略報告中的過濾器上下文,將包括所選行/表的所有內容
    例如:ALL(FactSales),ALL(FactSales[SalesAmount])

(3) CALCULATE()
CALCULATE(<expression>[, <filter1> [, <filter2> [, …]]])
此函數在過濾上下文中評估表達式/公式。
例如:CALCULATE(SUM([SalesAmount]), 'FactSales'[OrderDate] = '2023-09-16')

(4)FILTER函數
這是理解DAX的關鍵。由於在PBI中有多種應用過濾器的方式,因此了解過濾函數以創建正確和準確的計算非常重要。

  • FILTER()
    返回代表另一個表或表達式的子集的表。
  • CROSSFILTER()
    清除應用於所選表的所有過濾器

(5) SWITCH()
SWITCH(<expression>, <value>, <result>[, <value>, <result>]…[, <else>])
這是功能強大的DAX函數,類似於SQL中的CASE STATEMENT。
它可以評估表達式並基於返回值返回多個可能的結果。表達式可以參考布爾值(例如:TRUE())或表(例如:FactSales)

例如:
SWITCH(TRUE(), ALL(FactSales[SalesAmount])< 5000,'Target Not Met',ALL(FactSales[SalesAmount])>=5000,"Target Met")

(6) DIVIDE()
是除法運算符,如果分母為零,則將結果默認為空白,而不是錯誤。

(7) Declare Variables
您還可以在公式中聲明多個變數,以創建更複雜的測量。

例如:

Gross Margin =
Var x = sum(FactSales[SalesAmount])
Var y =sum(FactSales[TotalCost])
Var z = x-y
Return divide (z,x)

希望以上的一些基礎能夠幫助到剛接觸PBI的大家。


Ref:
https://support.microsoft.com/en-us/office/quickstart-learn-dax-basics-in-30-minutes-51744643-c2a5-436a-bdf6-c895762bec1a#:~:text=DAX%20is%20a%20collection%20of,data%20already%20in%20your%20model

https://radacad.com/sum-vs-sumx-what-is-the-difference-of-the-two-dax-functions-in-power-bi

https://janzednicek.cz/en/aggregation-in-dax-how-aggregations-work-function-overview/

https://learn.microsoft.com/en-us/dax/filter-functions-dax


對 dbt 或 data 有興趣 :wave:?歡迎加入 dbt community 到 #local-taipei 找我們,也有實體 Meetup 請到 dbt Taipei Meetup 報名參加


上一篇
PowerBI中設計數據模型(Schema)的小貼士
下一篇
資料處理 Python Pandas 好用的function - Part 1
系列文
資料分析的硬體以及軟體學習以及成長心得30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言